iT邦幫忙

2023 iThome 鐵人賽

DAY 13
1
AI & Data

當代資料工程與資料分析系列 第 13

View layer: Metabase - 自動化 (automation)

  • 分享至 

  • xImage
  •  

我曾協助某補教業的客戶建構企業內部的資料流程與儀表板。該公司在台灣有 200 間教室,於是,他們用 Metabase 做出了 200 個大同小異互動式儀表板,因為每間教室都需要一個。像這樣子的需求,有可能不使用手動作業,而是利用程式語言來做自動化生成嗎?

其實是辦得到的,因為 Metabase 也有提供 API ,換言之,Metabase 除了是一種 low code/no code 工具之外,它也提供了可程式化的介面

然而,要直接去串接 Metabase 的 API ,還是有點吃力。最理想的情況是,如果有個函式庫 (library),可以對 Metabase 的 API 做一點抽象化,那自動化的程式寫起來就會輕鬆許多,這樣子一來,Metabase 就變成了繪圖引擎

這邊有好消息、也有壞消息:

  • 好消息是:這樣子的函式庫已經存在了,它叫 Embedkit
  • 壞消息是:「Embedkit 是 Clojure 寫成的函式庫」。如果你從來沒有聽過 Clojure 語言,你可能覺得這個也太冷門了。於是你再一次地考慮,直接去使用 Metabase 的 API 。然而…,Metabase 的 API 文件,算是整個 Metabase 網站上所有的文件裡,我個人覺得相對品質略差的部分。品質差有可能是因為 Metabase 的改版也滿迅速的,我之前在開發 Embedkit 時,有時候實在是看不懂 Metabase 的 API 文件在寫什麼,最後還是乖乖地去讀 Metabase 的 source code ,畢竟 Metabase 是開源軟體嘛。喔,還有,Metabase 的 source code 也用是 Clojure 寫的…。

強制更新快取 (手動)

有時候,我們已經更新資料庫了,比方說,在資料庫裡新增了一張表 (table),但是,透過 Metabase 裡卻看不到。這是為什麼呢?

Metabase 其實會對與其連結的資料庫做一些掃描,並且把掃描完的結果快取下來。快取下的資訊通常是:「資料庫有哪些資料表、這些資料表的欄位是哪些、欄裡大概有哪裡值?」

為了處理快取失效的問題,我們可以手動強制 Metabase 立刻去更新快取:

  1. 點選 Settings > Admin settings > Databases
  2. 選擇你想立刻更新快取的資料庫名稱
  3. 手動去按兩個按鈕:
  • Sync database schema now
  • Re-scan field values now

update_cache.png

強制更新快取 (自動)

承接上個問題,那如果我們已經知道,每天的某幾個時間點,我們的 EL 工具,可能會在資料庫裡新放入幾張新的表 (table),而且我們希望 Metabase 的強制更新快取,可以恰好發生在 EL 的工作完成後,立刻更新呢?

這種情況,就很適合透過 API 來觸發強制更新快取。這邊為了降低大家使用 Embedkit 的門檻,我準備了一個範例的 git repo, Automation。

作法:

  1. 下載 Automation 
  2. 照 repo 上的細節,把軟體灌好。
  3. dev/config.edn 填寫對應的參數
  4. 下指令 clj -X automation.auto/run

運作原理解釋:

在 Automation 內部,自動化的程式碼:

(defn run [opts]
  (e/trigger-db-fn! conn (:db-name config) :sync_schema)
  (e/trigger-db-fn! conn (:db-name config) :rescan_values))

仔細看的話,run 也就只是去觸發 /sync_schema/rescan_values 兩個 API 而已。

其它應用 Embedkit 的例子

自動化產生「問題」

  • 下指令 clj -X automation.auto/create-card

自動化產生「儀表板」

  • 下指令 clj -X automation.auto/create-dashboard

dashboard.png

後記

就我從事 IT 工作的經驗來講,有三件工作常常是 IT 系統從「可用」走向「好用」的最後一哩路,然而,要堅持紀律把它們做好卻頗為困難:

  1. 自動化 (automation)
  2. 除錯介面 (debugging interface)
  3. 可延伸的抽象層 (extensible abstraction)

本文所示範的 Metabase 自動化,就是其中一件事。


其它資源

  1. 對 dbt 或 data 有興趣 👋?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加
  2. 歡迎訂閱 PruningSuccess 電子報,主要談論軟體開發、資料處理、資料分析等議題。

上一篇
View layer: Metabase - 互動儀表板與嵌入式分析
下一篇
Tranformation layer: SQL & dbt
系列文
當代資料工程與資料分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言